// 把json对象转换成str且过滤掉空值
export function transformJsonToQuery(json) {
  if (!json) return '';
  const params = new URLSearchParams();
  for (const [key, value] of Object.entries(json)) {
    if (value !== null && value !== undefined && value.toString().trim() !== '') {
      params.append(key, value);
    }
  }

  return params.toString();
}

// 把json对象、过滤undefined、过滤字符串 去除前后空格
export function transformBody(body) {
  if (!body) return null;

  let bodyParams = {};

  for (const [key, value] of Object.entries(body)) {
    // 过滤undefined
    let val = value === undefined ? null : value;
    // 过滤字符串 去除前后空格
    if (typeof value === 'string') {
      val = value.trim();
    }
    // null、空字符串、0、false都可以通过

    bodyParams[key] = val;
  }

  return bodyParams;
}

// 解析contentDisposition获取filename
export function parseContentDisposition(contentDisposition) {
  // 使用正则表达式匹配filename的值
  const matches = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec(contentDisposition);
  if (matches !== null && matches[1]) {
    // 解码文件名
    return decodeURIComponent(matches[1].replace(/['"]/g, ''));
  }
  return null;
}

// 下载Blob文件流
export function downloadBlob(blob, contentDisposition) {
  const url = window.URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.style.display = 'none';
  a.href = url;
  if (contentDisposition) {
    a.download = parseContentDisposition(contentDisposition); // 设置文件名
  }
  document.body.appendChild(a);
  a.click();
  window.URL.revokeObjectURL(url);
  a.remove();
}
